Так как адаптеров может быть много, то надо как то научиться их перебирать. С адаптерами работает интерфейс NDIS, это самый нижний уровень. Дальше драйвер сетевой карты. А вот над этим интерфейсом как раз и находиться NetBios вот с помощью него мы попробуем получить этот список. Ниже я приведу часть схемы которую я постепенно делаю связанную с данным вопросом. Как только схема будет готова Вы увидите ее на сейте, а пока вот кусок.
Итак, среди команд NetBios есть одна связанная с данным вопросом правда как написано не стандартная NCBENUM. Microsoft как всегда что то там рассказывает о Windows NT, а нам все равно правда?
Получение информации о адаптере взято из Шаг 1 - Получение MAC адреса сетевой карты.
#include "stdafx.h"
#include "windows.h"
#include "nb30.h"
#include "iostream.h"
#include "mbstring.h"
#pragma comment(lib,"Netapi32.lib")
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}Adapter;
void main()
{
NCB ncb;
UCHAR uRetCode;
LANA_ENUM la;
memset( &ncb,0,sizeof(ncb));
ncb.ncb_command = NCBENUM;
ncb.ncb_buffer=(unsigned char *) &la;
ncb.ncb_length = sizeof(LANA_ENUM );
uRetCode = Netbios((NCB*) &ncb );
if ( uRetCode == NRC_GOODRET )
{
cout << "Ok" << endl;
for (int x=0;x<la.length;x++)
{
cout << "Adapter " << x << " - INFO - " << endl;
memset( &ncb, 0, sizeof(ncb) );
// Это из первого шага
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = la.lana[x]; // это наш номер
_mbscpy( ncb.ncb_callname,(UCHAR*)"* ");
Adapter a1;
ncb.ncb_buffer = (unsigned char *) &a1;
ncb.ncb_length = sizeof(a1);
uRetCode = Netbios((NCB*) &ncb );
if ( uRetCode == NRC_GOODRET )
{
printf( "The Ethernet Number is: %02x%02x%02x%02x%02x%02x\n",
a1.adapt.adapter_address[0],
a1.adapt.adapter_address[1],
a1.adapt.adapter_address[2],
a1.adapt.adapter_address[3],
a1.adapt.adapter_address[4],
a1.adapt.adapter_address[5] );
}
else cout << "error read" << endl;
// конец кода первого шага
}
}
else cout << uRetCode;
}
Все как всегда разве структура новая. Запускаем смотрим.
Номеров три. И адаптеров три, только два номера похожи. Последний номер это контролер удаленного доступа. А вот один из похожих это сетевая карта и ИК порт который Plug&Play в самом хорошем понимании не спрашивая него и не кого устанавливается при первом удобном случае. Вообще работает все это. Кстати Netapi32 использует NetBios.dll сама по себе нечего не делая.